/*
******************
* author: 马丰彦
* date: 2019-05-09
* function: urldecode
******************
*/

function urldecode(encodedString) {
  var output = encodedString
  var binVal, thisString
  var myregexp = /(%[^%]{2})/
  var x = 0
  function utf8to16(str) {
    var out, i, len, c
    var char2, char3
    out = ''
    len = str.length
    i = 0
    while (i < len) {
      c = str.charCodeAt(i++)
      switch (c >> 4) {
        case 0:
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
        case 6:
        case 7:
          out += str.charAt(i - 1)
          break
        case 12:
        case 13:
          char2 = str.charCodeAt(i++)
          out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F))
          break
        case 14:
          char2 = str.charCodeAt(i++)
          char3 = str.charCodeAt(i++)
          out += String.fromCharCode(((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0))
          break
      }
    }
    return out
  }
  var match = myregexp.exec(encodedString.substr(x))
  while ((match = myregexp.exec(output)) !== null && match.length > 1 && match[1] !== '') {
    binVal = parseInt(match[1].substr(1), 16)
    thisString = String.fromCharCode(binVal)
    output = output.replace(match[1], thisString)
  }
  // output = utf8to16(output);
  output = output.replace(/\\+/g, ' ')
  output = utf8to16(output)
  return output
}
export default urldecode
